package com.atguigu.gmall.feign.product;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.product.entity.SkuImage;
import com.atguigu.gmall.model.product.entity.SkuInfo;
import com.atguigu.gmall.model.product.entity.SpuSaleAttr;
import com.atguigu.gmall.model.product.to.CategoryTO;
import com.atguigu.gmall.model.product.to.CategoryView;
import org.checkerframework.framework.qual.RequiresQualifier;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import java.math.BigDecimal;
import java.util.List;

/**
 * //feign自己去注册中心找到 service-product 的真正地址
 * //service-product 两次含义：
 * //1）、需要远程调用的服务名是哪个
 * //2）、作为当前feign客户端的 客户端的配置名（超时、容错、重试）；
 * //如果 value重名了。三种办法：
 * //1)、配置文件允许Bean定义信息重写
 * //2）、每个人指定唯一的 contextId
 * //3)、将某个服务暴露的所有远程接口，都放到一个FeignClient类中进行集中式管理（缺点：代码多不好看  优点：集中管理维护容易）
 */
@FeignClient("service-product")
@RequestMapping("/api/inner/product")
public interface CategoryFeignClient {

    /**
     * feign: 声明式客户端； 自动给指定位置发请求，自动把响应数据转成我们想要的类型
     * 同一套API，两处不同用法
     * @GetMapping： controller  代表接受一个get形式的请求
     * @GetMapping： feignclient 代表发送一个get形式的请求
     * @RequestParam: controller  代表从请求参数中获取数据
     * @RequestParam: feignclient  代表把方法传入的参数放到请求参数位置，并用指定的参数名
     * @RequestBody: controller  代表从请求体中获取数据，并转为指定的对象
     * @RequestBody: feignclient  代表把方法传入的对象转为json，放到请求体，把请求发出去
     * @RequestHeader： controller  代表从请求头中获取数据
     * @RequestHeader： feignclient  代表把方法传入的参数放到请求头
     * 方法返回值：
     * @return
     */
    @GetMapping("/getCategoryByC3Id/{c3Id}")
    Result<CategoryView> getCategoryByC3Id(@PathVariable Long c3Id);

    @GetMapping("/getCategory")
    public Result<List<CategoryTO>> getCategory();




}
